Apparatuses and methods for interleaved BCH codes

ABSTRACT

An example methods for interleaved BCH codes can include encoding a plurality of portions of data using a first generator polynomial to obtain a plurality of respective BCH codewords. The method can include encoding an additional BCH codeword based at least in part on a second plurality of portions of data and the plurality of BCH codewords using a second generator polynomial. The method can include outputting the plurality of respective BCH codewords and the additional BCH codeword.

TECHNICAL FIELD

The present disclosure relates generally to semiconductor memory and methods, and more particularly, to apparatuses and methods related to interleaved BCH codes.

BACKGROUND

Memory devices are typically provided as internal, semiconductor, integrated circuits in computers or other electronic devices. There are many different types of memory including volatile and non-volatile memory. Volatile memory can require power to maintain its data (e.g., host data, error information, etc.) and includes random-access memory (RAM), dynamic random access memory (DRAM), and synchronous dynamic random access memory (SDRAM), among others. Non-volatile memory can provide persistent data by retaining stored data when not powered and can include NAND flash memory, NOR flash memory, read only memory (ROM), Electrically Erasable Programmable ROM (EEPROM), Erasable Programmable ROM (EPROM), and resistance variable memory such as phase change random access memory (PCRAM), resistive random access memory (RRAM), and magnetoresistive random access memory (MRAM), among others.

Memory devices can be combined together to form a storage volume of a memory system such as a solid state drive (SSD). A solid state drive can include non-volatile memory (e.g., NAND flash memory and NOR flash memory), and/or can include volatile memory (e.g., DRAM and SRAM), among various other types of non-volatile and volatile memory.

An SSD can be used to replace hard disk drives as the main storage volume for a computer, as the solid state drive can have advantages over hard drives in terms of performance, size, weight, ruggedness, operating temperature range, and power consumption. For example, SSDs can have superior performance when compared to magnetic disk drives due to their lack of moving parts, which may avoid seek time, latency, and other electro-mechanical delays associated with magnetic disk drives.

Memory is utilized as volatile and non-volatile data storage for a wide range of electronic applications. Non-volatile memory may be used in portable electronic devices, such as laptop computers, portable memory sticks, digital cameras, cellular telephones, portable music players such as MP3 players, movie players, and other electronic devices. Memory cells can be arranged into arrays, with the arrays being used in memory devices.

To ensure data integrity, error correction codes can be used to detect and correct certain numbers and/or types of errors in the data. One type of error correction involves integrated interleaved codes. Integrated interleaved codes can be systematic codes (i.e., input data is included or otherwise embedded in the encoded data) and can generate multiple codewords, each of which can be at a particular level. Powerful error correction may be desired but balanced against latency, throughput, and/or power constraints such as those imposed by portable electronic devices.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram of a system for implementing interleaved BCH codes in accordance with a number of embodiments of the present disclosure.

FIG. 2 illustrates an example of a diagram for integrated interleaved encoding in accordance with a number of embodiments of the present disclosure.

FIG. 3 illustrates an example of a diagram for generalized integrated interleaving of BCH codes in accordance with a number of embodiments of the present disclosure.

DETAILED DESCRIPTION

The present disclosure includes apparatuses and methods related to interleaved BCH codes. A number of methods can include encoding a plurality of portions of data using a first generator polynomial to obtain a plurality of respective BCH codewords. The number of methods can include encoding an additional BCH codeword based at least in part on a second plurality of portions of data and the plurality of BCH codewords using a second generator polynomial. The number of methods can include outputting the plurality of respective BCH codewords and the additional BCH codeword.

In the following detailed description of the present disclosure, reference is made to the accompanying drawings that form a part hereof, and in which is shown by way of illustration how one or more embodiments of the disclosure may be practiced. These embodiments are described in sufficient detail to enable those of ordinary skill in the art to practice the embodiments of this disclosure, and it is to be understood that other embodiments may be utilized and that process, electrical, and/or structural changes may be made without departing from the scope of the present disclosure. As used herein, “a number of” a particular thing can refer to one or more of such things (e.g., a number of memory devices can refer to one or more memory devices).

The figures herein follow a numbering convention in which the first digit or digits correspond to the drawing figure number and the remaining digits identify an element or component in the drawing. Similar elements or components between different figures may be identified by the use of similar digits. For example, 220 may reference element “20” in FIG. 2, and a similar element may be referenced as 320 in FIG. 3. As will be appreciated, elements shown in the various embodiments herein can be added, exchanged, and/or eliminated so as to provide a number of additional embodiments of the present disclosure. In addition, as will be appreciated, the proportion and the relative scale of the elements provided in the figures are intended to illustrate certain embodiments of the present invention, and should not be taken in a limiting sense.

FIG. 1 is a block diagram of an apparatus in the form of computing system 101 for implementing interleaved BCH codes in accordance with a number of embodiments of the present disclosure. As used herein, the computing system 101 can include a host 102 and a memory device 104. The memory device 104 can include a host interface 106, a controller 108, and a memory array 110.

The host 102 can be coupled (e.g., connected) to memory device 104, which includes the memory array 110. Host 102 can be a host system such as a personal laptop computer, a desktop computer, a digital camera, a smart phone, or a memory card reader, among various other types of hosts. Host 102 can include a system motherboard and/or backplane and can include a number of processing resources (e.g., one or more processors, microprocessors, or some other type of controlling circuitry). The system 101 can include separate integrated circuits or both the host 102 and the memory device 104 can be on the same integrated circuit. The system 101 can be, for instance, a server system and/or a high performance computing (HPC) system and/or a portion thereof. Although the example shown in FIG. 1 illustrates a system having a Von Neumann architecture, embodiments of the present disclosure can be implemented in non-Von Neumann architectures (e.g., a Turing machine), which may not include one or more components (e.g., CPU, ALU, etc.) often associated with a Von Neumann architecture.

For clarity, the system 101 has been simplified to focus on features with particular relevance to the present disclosure. The memory array 110 can be a hybrid memory cube (HMC), processing in memory random access memory (PIMRAM) array, DRAM array, SRAM array, STT RAM array, PCRAM array, TRAM array, RRAM array, NAND flash array, and/or NOR flash array, for instance. The array 110 can comprise memory cells arranged in rows coupled by access lines (which may be referred to herein as word lines or select lines) and columns coupled by sense lines. Although a single array 110 is shown in FIG. 1, embodiments are not so limited. For instance, memory device 104 may include a number of arrays (e.g., a number of banks of DRAM cells).

The controller 108 can be coupled to the host interface 106 and to the memory 110 via a plurality of channels (not shown) and can be used to transfer data between the memory system 104 and a host 102. The host interface 106 can be in the form of a standardized interface. For example, when the memory system 104 is used for data storage in a computing system 101, the host interface 106 can be a serial advanced technology attachment (SATA), peripheral component interconnect express (PCIe), or a universal serial bus (USB), among other connectors and interfaces. In general, however, the host interface 106 can provide an interface for passing control, address, data, and other signals between the memory system 104 and a host 102 having compatible receptors for the host interface 106.

The controller 108 can include write logic 112 and read logic 114. Controller 108 can cause data to be written to memory array 110 and/or additional memory locations and can cause data to be read back from the memory array 110. Prior to storing data in the memory array 110, data can be encoded using an integrated interleaved encoder 116. When the data is read from the memory array 110, the data can be read from the memory array 110 and decoded using an integrated interleaved decoder 118. In some examples, a read back from the memory array 110 can have noise or errors in the data and using an integrated interleaved code can allow the read-back errors to be corrected.

To achieve better error protection over an array of interleaves within a single cluster or block of data, a two-level interleaved scheme can be used and a generalized interleaved scheme can provide nonuniform redundancy (see FIG. 3). An array of interleaves refers to data arranged in a noncontiguous manner. Interleaving can refer to dividing memory into small chunks and used as a high-level technique to solve memory issues for motherboards and chips. In this way, interleaving can control errors with particular methods. The nonuniform redundancy is provided by using extra check symbols that are shared among all the interleaves and used by interleaves with errors beyond their decoding distance. However, this construction may not provide protection to the shared redundancies. Instead, another code can be required to protect these shared check symbols from errors. The integrated interleaving (II) coding scheme can provide an improvement of error correction by creating shared redundancy that is protected by the first-layer code. Specifically, the II coding scheme nests a set of m equally protected interleaves with v (v<m) more powerful codewords in the nested layer which is a subcode of the first layer. Specifically, let {

_(i)(n, k_(i), d_(i))}_(i=0) ¹ be defined over the Galois field GF(q) such that

₁⊂

₀. An II code is defined as follows:

{c=[c ₀ ,c ₁ ,c ₂ , . . . ,c _(m−1)]:c _(i)ε

₀,Σ_(i=0) ^(m−1)α^(bi) c _(i)ε

₁ ,b=0,1,2, . . . ,v−1},  (1) where v<m<q. The above defined II code enables correction of up to v interleaves that are failed by self-decoding. Self-decoding refers to a decoding that is performed using codewords associated with a particular portion of data without referencing codewords at a higher level. For example, a lower level codeword (e.g., codeword 334-0 in FIG. 3) can decode a portion of data (e.g., data a₀x 320-0) without referencing higher level codewords (e.g., such as codeword C₀ 342 and/or codeword C₃ 346-3).

A generalized two-layer II coding scheme allows unequal protection in the nested layer. Specifically, let {

_(i)(n, k_(i), d_(i))}_(i=0) ^(v) be defined over the Galois field GF(q) such that

_(v) ⊆

_(v−1) ⊆

_(v−2) ⊆ . . . ⊆

₁⊂

₀  (2) A generalized integrated interleaved (GII) code is defined as

{c=[c ₀ ,c ₁ ,c ₂ , . . . ,c _(m−1)]:c _(i)∈

₀,Σ_(i=0) ^(m−1)α^(bi) c _(i)∈

_(v−b),0≤b<v},  (3)

where v<m<q. As described further below, the proposed definition illustrates an implementation for both encoder and decoder. Some benefits can include a GII codeword exhibiting larger minimum distance and more powerful performance. When up to v component words are failed by self-decoding, it can be highly unlikely that all failed words have equal number of errors. Instead, the worst corrupted word can entail the largest correction power, whereas the least corrupted word can entail the smallest correction power.

The GII scheme is similar to a generalized concatenated (GC) scheme in view of theoretical performance and shared redundancies on top of the first layer self-correction. The main difference and advantage of GII codes can be that their shared redundancies are also embedded in, and thus protected by, the first-layer interleaves, whereas for GC codes, the shared redundancies may not be. The nested layer codes form a subcode order and are subcodes of the first-layer code (see Equation (2)) in GII codes, whereas the inner (but not outer) codes forms a subcode order and are used to encode each symbol of outer codes in GC codes. The nested layer codes and the first-layer code can share the same field and code length in GII codes, however, the outer codes can be defined in a larger field and thus have much larger length than the inner codes in GC codes. As a consequence, the implementation and architecture of GII codes can be different from the schemes of the GC codes.

In some embodiments, the size of a flash page is 16 kilobyte (KB)+8-12% overhead, and can continue increasing in order to increase capacity while maintaining throughput (note data for a flash page is programmed altogether). On the other hand, a data sector size is currently 4 KB, therefore, multiple sectors must be buffered until a page is filled before programming. Binary b (BCH) codes have been extensively employed to tackle bit corruptions caused by retention. The GII-BCH scheme does not cause write latency, and moreover, each sector can be read out independently under normal conditions (meaning each sector is correctable by the first layer self-decoding). In some embodiments, formal efficiency can be traded off with power consumption. In previous approaches, a data sector was in the form of 512 B initially, then shifted to 4 KB, and is gradually moving to 8 KB. The format efficiency found in longer code lengths diminishes after 2 KB for prevalent coding schemes, while circuit complexity and power consumption roughly increases linearly with code length. To this end, GII codes serve as an alternative to be more complex but also more efficient than simple interleaves, on the other hand, less complex but also less efficient than a single code.

For various potential applications of II/GII codes, it can be beneficial to make the miscorrection negligible for the interleave self-decoding, since it enables decoding of each interleave independently under normal operation where the noise level is below the error correction capability. On the other hand, this may not be a stringent condition to meet. For Reed Solomon (RS) or BCH codes with relatively large minimum distances, the miscorrection probability is below the level of practical tolerance. This also significantly simplifies the nested decoding and the corresponding performance analysis. Also, in some approaches, decoding methods proposed for II/GII codes are can be computationally inefficient, in two perspectives, where the two perspectives include a syndrome computation and key-equation-solver. A syndrome refers to multiplying a parity check matrix times a particular vector. For example, codewords of a code have a syndrome of zero when the codeword include no errors and if all syndromes are zero, decoding can be completed. The previous method approaches can rebuild corrupted nested interleaves and then compute their syndromes. This can be more efficiently achieved by computing syndromes on the constructed nested (corrupted) interleaves only on the first time while updating syndromes by removing contributions from the corrected interleaves at each iteration of decoding attempt. Moreover, syndromes for existing uncorrectable interleaves can remain valid and each subsequent attempt will incrementally add high order syndromes in order to correct the previously uncorrectable interleaves. Additionally, when the method is deployed to decode interleaves, the output of the BM method can be readily reused in the next iteration by incorporating extra syndromes.

FIG. 2 illustrates an example of a diagram 203 for integrated interleaved encoding in accordance with a number of embodiments of the present disclosure. The diagram 203 includes a plurality of data polynomials such as a₀(x) 220-1, a₁(x) 220-2, a₂(x) 220-3, and a₃(x) 220-4 (herein referred to in combination as 220). The diagram 203 includes a plurality of encoders 222-1, 222-2, 222-3, 226 (herein referred to in combination as 222, 226), and a plurality of codewords 234-1, 234-2, 234-3, 236 (herein referred to in combination as 234, 236). Encoders 222-1, 222-2, 222-3 use a plurality of generator polynomials (e.g., g(x)) to encode the plurality of data polynomials 220. Cyclic codes, including BCH codes, can be systematically encoded by a simple linear-feedback-shift-register (LFSR) circuit. Specifically, an LFSR encoder systematically encodes a data polynomial a(x) 220 to a systematic codeword c(x) 234, 236 through iteratively dividing −x^(r)a(x) by corresponding generator polynomials g(x). In the equation −x^(r)a(x), r denotes parity length, and a(x) denotes a message polynomial. A systematic codeword includes an original data polynomial a(x) 220 (e.g., input data or data prior to encoding) and a resulting remainder polynomial p(x), where the LFSR encoding is illustrated by: ε(a(x),g(x))→c(x)

[a(x),p(x)] A systematic codeword can be indexed in the reverse in a polynomial representation illustrated by c=[c_(n−1), c_(n−2), . . . , c₁, c₀].

In at least some embodiments, systematic encoding includes input data being embedded in encoded data (e.g., as codewords) and becomes output data. In at least some examples with a single nested word, i.e., v=1, input data can be in a beginning portion of a codeword. Redundant data (e.g., bits, bytes and/or symbols) can be added by systematically encoding using generator polynomials g₀(x) and g₁(x), where g₀(x) divides g₁(x). As illustrated in FIG. 2, the encoders 222-1, 222-2, 222-3 are configured to to respectively input and systematically encode input data a₁(x), a₂(x), a₃(x) using g₀(x). Codewords c₁(x), c₂(x), and c₃(x) are correspondingly output by systematic encoders 222-1, 222-2, 222-3. To obtain the remaining codewords, a systematic encoding with respect to generator polynomial g₁(x) is performed. Data polynomials α₀(x) 220-1 through α₃(x) 220-4 are correlated with a r₁−r₀ delay 229 and input to adder 224 which outputs a sum of the input. The r₁−r₀ delay 229 refers to deferring encoding until a clock number r₁−r₀, which is related to a delay unit of r₁−r₀ The delay unit refers to a shift-align of a₀(x) with remaining input data a₁(x), a₂(x), a₃(x), noting that a₀(x) is shorter by r₁−r₀ bits. The sum in turn becomes input to a multiplexer 232-1. In addition, additional data (e.g., multiplexing with “0”) 231 is input into multiplexer 232-1. Output data of multiplexer 232-1 becomes input data for encoder 226 which systematically encodes the sum using g₁(x) and outputs an intermediate portion of data.

In at least one embodiment, data polynomial a0(x) 220-1 is received by a multiplexer 232-2 as a first input of data. A second input of data into the multiplexer 232-2 is from adder 230. Adder 230 receives as input redundant data output from encoder 226, and inverted or negative redundant data that are output data from encoders 222-1, 222-2, 222-3, respectively. A select signal (not illustrated) is configured to select an appropriate input at an appropriate time from each corresponding encoder. Although some of the equations and/or descriptions are associated with a particular number of encoders and/or data inputs and outputs, embodiments are not so limited.

In some previous approaches, a systematic encoding method can be implemented for binary BCH code for a particular case where v=1. This is due to coefficients α^(bi) given in equation 3 being valid only with b=0. In the following description, a generalized integrated interleaving encoding method for BCH codes is described (where v>=1). In some embodiments, an integrating coefficient is substituted, say γ∈GF(2^(q)), by its associated binary polynomial

$\begin{matrix} {{{\gamma(x)}\overset{\Delta}{=}{{\gamma_{q - 1}x^{q - 1}} + {\gamma_{q - 2}x^{q - 2}} + \ldots + {\gamma_{1}x} + \gamma_{0}}}{{{{where}\mspace{14mu}\gamma_{i}} \in {{GF}(2)}},{i = 0},1,\ldots\mspace{14mu},{q - 1},{and}}\begin{matrix} {\gamma\overset{\Delta}{=}\left\lbrack {\gamma_{q - 1},\gamma_{q - 2},\ldots\mspace{14mu},\gamma_{1},\gamma_{0}} \right\rbrack} \\ {= {{\gamma_{q - 1}\alpha^{q - 1}} + {\gamma_{q - 2}\alpha^{q - 2}} + \ldots + {\gamma_{1}\alpha} + {\gamma_{0}.}}} \end{matrix}} & (5) \end{matrix}$ This substitution includes the following properties, α(x ^(j))=x ^(j) mod ψ(x)  (6) where α denotes a primitive element in GF(2^(q)) that is defined by a primitive polynomial ψ(x). α(γ)=γ,∀γ∈GF(2^(q)),  (7) α(x ^(i))=α(x ^(i)),0≤i<2^(q),  (8) α⁻¹(x)=α(x)⁻¹(mod ψ(x)).  (9) A primitive element refers to a generator of a multiplicative group of a finite field GF(q). For example, α in the set of GF(q) is called a primitive element if it is a primitive (q−1) root of unity in GF(q). This means that all non-zero elements of GF(q) can be written as α^(i) for some (positive) integer i

A t-correcting BCH code

(n,k) defined over the Galois field GF(2^(q)) has the following generator polynomial g(x)

=LCM(m ₁(x),m ₃(x), . . . ,m _(2t−1)(x))  ((10) where LCM denotes “the least common multiple”, and m_(i)(x) denotes the minimal (binary) polynomial to contain the root α^(i). Let {

_(i)(n, k_(i), d_(i))}_(i=0) ^(v) be binary BCH codes satisfying

₀⊃

₁= . . . =

_(i) ₂ ⊃

_(i) ₂ ₊₁= . . . =

_(i) _(s) ⊃ . . . =

_(i) _(s−2) ⊃

_(i) _(s−2) ₊₁= . . . =

_(i) _(s)   (11) where i₀=0 and i_(s)=v. A GII-BCH code is given by

{c=[c ₀ ,c ₁ ,c ₂ , . . . ,c _(m−1)]:c _(i)(x)∈

₀,Σ_(i=0) ^(m−1)α(x ^(bi))c _(i)(x)∈

_(v−b),0≤b<v},  (12) where v<m<2^(q). The next theorem characterizes the basic property of GII-BCH codes. Theorem 1 Let d_(i)*, i=0, 1, . . . , v, denote the actual (against the designed) minimum distance of the BCH code

_(i), The GII-BCH code

(N, K, d_(min)*) is a binary linear code of length N=mn, dimension K=Σ_(i=1) ^(v) k_(i)+(m−v)k₀, and minimum distance bounded by d _(min)*≥min{(v+1)d ₀*,(v−i ₁+1)d ₁*, . . . ,(v−i _(s−1)+1)d _(i) _(s−1) *,d _(v)*}.  (13) Proof. By the lemma, if there are i (i≤v) non-zero interleaves, then they must all lie in

_(v−i+1). This concludes the lower bound of minimum distance. Lemma 1 Let c_(i)=(x), i=0, 1, . . . , v−1, be BCH codewords in

₀. If

$\begin{matrix} {{\begin{bmatrix} 1 & 1 & \ldots & 1 \\ {\alpha(x)} & {\alpha\left( x^{2} \right)} & \ldots & {\alpha\left( x^{v - 1} \right)} \\ \vdots & \vdots & \ddots & \vdots \\ {\alpha\left( x^{v - 1} \right)} & {\alpha\left( x^{2{({v - 1})}} \right)} & \ldots & {\alpha\left( x^{{({v - 1})}{({v - 1})}} \right)} \end{bmatrix} \cdot \begin{bmatrix} {c_{0}(x)} \\ {c_{1}(x)} \\ \vdots \\ {c_{v - 1}(x)} \end{bmatrix}}->\begin{bmatrix} {c_{0}^{\prime}(x)} \\ {c_{1}^{\prime}(x)} \\ \vdots \\ {c_{v - 1}^{\prime}(x)} \end{bmatrix}} & (14) \end{matrix}$ lies in

₁, where

₁ ⊂

₀. Then, c_(i)(x), i=0, 1, . . . , v−1, must lie in

₁. Proof. It suffices to show that each c_(i)(x), i=0, 1, . . . , v−1, contains all roots of

$\frac{g_{s}(x)}{g_{0}(x)}.$ Let γ be a root of

$\frac{g_{s}(x)}{g_{0}(x)}.$ Evaluating (15) with x=γ, we obtain

${\begin{bmatrix} 1 & 1 & \ldots & 1 \\ \gamma & \gamma^{2} & \ldots & \gamma^{v - 1} \\ \vdots & \vdots & \ddots & \vdots \\ \gamma^{v - 1} & \gamma^{2{({v - 1})}} & \ldots & \gamma^{{({v - 1})}{({v - 1})}} \end{bmatrix}\begin{bmatrix} {c_{0}(\gamma)} \\ {c_{1}(\gamma)} \\ \vdots \\ {c_{v - 1}(\gamma)} \end{bmatrix}} = \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 0 \end{bmatrix}$ Since the connection matrix is non-singular, the above equality indicates c _(i)(γ)=0,i=0,1, . . . ,v−1. Therefore, c_(i)(x), i=0, 1, . . . , v−1, all divide g₁(x). We note from the above proof that, unlike a GII-Reed Solomon (RS) code whose minimum distance is precisely determined, the minimum distance of a GII-BCH code is loosely bounded. Following the convention of BCH characterizations, we define the designed minimum distance, denoted by d_(min), for a GII-BCH code as d _(min)

min{(v+1)d ₀,(v−i ₁+1)d ₁, . . . ,(v−i _(s−1)+1)d _(i) _(s−2) ,d _(v)}.   (15)

In at least one embodiment, a systematic encoding method which is modified is described below. For example, let a₀(x), a₁(x), a₂(x), . . . , a_(m−1)(x) be data polynomials, satisfying deg(a_(i)(x))<k_(v−1), 0≤i<v, and deg(a_(j)(x))<k₀, v≤j<m. Assume that a_(v)(x), a_(v+1)(x), . . . , a_(m−1)(x), are systematically encoded to c_(v)(x), c_(v+1)(x), . . . , c_(m−1) (x), respectively, utilizing the generator polynomial g₀(x). We are interested in determining systematic codewords,

c_(i)(x)

[a_(i)(x), p_(i)(x)] (deg(p_(i)(x))<r_(v−1)), i=0, 1, . . . , v−1, satisfying:

$\begin{matrix} \left\{ \begin{matrix} {c_{0}(x)} & {+ {c_{1}(x)}} & {+ \ldots} & {+ {c_{v - 1}(x)}} & {\equiv {\sum\limits_{i = v}^{m - 1}{{c_{i}(x)}\left( {{mod}\;{g_{v}(x)}} \right)}}} \\ {c_{0}(x)} & {{+ {\alpha(x)}}{c_{1}(x)}} & {+ \ldots} & {{+ {\alpha\left( x^{v - 1} \right)}}{c_{v - 1}(x)}} & {\equiv {\sum\limits_{i = v}^{m - 1}{{\alpha\left( x^{i} \right)}{c_{i}(x)}\left( {{mod}\;{g_{v - 1}(x)}} \right)}}} \\ {c_{0}(x)} & {{+ {\alpha\left( x^{2} \right)}}{c_{1}(x)}} & {+ \ldots} & {{+ {\alpha\left( x^{2{({v - 1})}} \right)}}{c_{v - 1}(x)}} & {\equiv {\sum\limits_{i = v}^{m - 1}{{\alpha\left( x^{2i} \right)}{c_{i}(x)}\left( {{mod}\;{g_{v - 2}(x)}} \right)}}} \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ {c_{0}(x)} & {{+ {\alpha\left( x^{v - 1} \right)}}{c_{1}(x)}} & {+ \ldots} & {{+ {\alpha\left( x^{{({v - 1})}{({v - 1})}} \right)}}{c_{v - 1}(x)}} & {\equiv {\sum\limits_{i = v}^{m - 1}{{\alpha\left( x^{i{({v - 1})}} \right)}{c_{i}(x)}\left( {{mod}\;{g_{1}(x)}} \right)}}} \end{matrix} \right. & (16) \end{matrix}$ To solve for c_(v−1)(x), we again relax from mod g_(i)(x), i=1, 2, . . . , v, in the above system to mod g₁(x). Denote by Γ^((i)) (x) the inverse matrix

$\begin{matrix} {{\Gamma^{(i)}(x)}\overset{\Delta}{=}{\left\lbrack {{\Gamma_{0}^{(i)}(x)},{\Gamma_{1}^{(i)}(x)},\ldots\mspace{14mu},{\Gamma_{i}^{(i)}(x)}} \right\rbrack^{T}\overset{\Delta}{=}{\begin{bmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & {\alpha(x)} & {\alpha^{2}(x)} & \ldots & {\alpha^{i}(x)} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & {\alpha^{i}(x)} & {\alpha^{2i}(x)} & \ldots & {\alpha^{i^{2}}(x)} \end{bmatrix}^{- 1}\left( {{mod}\;{g_{v - i}(x)}} \right)}}} & (17) \end{matrix}$ and by θ^((i))(x) the matrix

$\begin{matrix} {{\Theta^{(i)}(x)}\overset{\Delta}{=}\begin{bmatrix} 1 & 1 & \ldots & 1 \\ {\alpha^{i + 1}(x)} & {\alpha^{i + 2}(x)} & \ldots & {\alpha^{m - 1}(x)} \\ \vdots & \vdots & \ddots & \vdots \\ {\alpha^{{({i + 1})}i}(x)} & {\alpha^{{({i + 2})}i}(x)} & \ldots & {\alpha^{{({m - 1})}i}(x)} \end{bmatrix}} & (18) \end{matrix}$ for i=0, 1, 2, . . . , v−1. By pre-computing the coefficient vector π^((i))(x)

Γ_(i) ^((i))(x)·θ^((i))(x)(mod g _(v−1)(x)),  (19)

c_(v−1)(x) is explicitly expressed c _(v−1)(x)≡π^((v−1))(x)·[c _(v)(x),c _(v+1)(x), . . . ,c _(m−1)(x)]^(T)(mod g ₁(x)).  (20) And so forth, c_(v−2)(x), c_(v−3)(x), . . . , c₁(x), C₀(x), are computed sequentially c _(i)(x)≡π^((i))(x)·[c _(i+1)(x),c _(i+2)(x), . . . ,c _(m−1)(x)]^(T)(mod g _(v−1)(x)).  (21) for i=v−1, v−2, . . . , 1, 0. For ease of reference, we introduce two operators. £_(τ) truncates a polynomial a(x) to keep only its lowest τ terms, £_(τ) a(x)

a(x)mod x ^(τ).  (22) U_(τ) truncates a polynomial a(x) to keep its upper terms starting with power x^(τ). U _(τ) a(x)

(a(x)−£_(τ) a(x))/x ^(τ).  (23)

An example encoding method can include the following:

-   -   1. Apply LFSR encoding to a_(v)(x), a_(v+1)(x), . . . ,         a_(m−1)(x), respectively, with respect to g₀(x)         ε(a _(i)(x),g ₀(x))→c _(i)(x)         [a _(i)(x),p _(i)(x)]         where deg(p_(i)(x))<r₀, for i=v, v+1, . . . , m−1.     -   2. For i=v−1, v−2, . . . , 1, 0, do:         -   (a) Compute new message             f _(i)(x)             x ^(r) ^(v−i) a _(i)(x)+π^((i))(x)·[c _(i+1)(x),c _(i+2)(x),             . . . ,c _(m−1)(x)]^(T),             -   where π^((i))(x) is given in (19).         -   (b) Apply LFSR encoding with respect to g_(v−i)(x)             ε(U _(r) _(v−i) f _(i)(x),g _(v−i)(x))→[U _(r) _(v−i) f             _(i)(x),p _(i)*(x)].         -   (c) Determine the parity polynomial p_(i)(x) associated with             a_(i)(x)             p _(i)(x)=p _(i)*(x)+£_(r) _(v−i) f _(i)(x).

FIG. 3 illustrates an example of a diagram for generalized integrated interleaving of BCH codewords in accordance with a number of embodiments of the present disclosure. FIG. 3 illustrates an example of GII-BCH codewords in an example flash memory. A plurality of data portions a₀(x) 320-0 to a₇(x) 320-7 are each 2 KB in length. Each of the plurality of data portions a₀(x) 320-0 to a₇(x) 320-7 are associated with a plurality of portions of parity data p₀(x) 340-0 to p₇(x) 340-7. The plurality of portions of parity data p₀(x) 340-0 to p₇(x) 340-7 can each be a particular length. For example, a 0^(th) parity data p₀(x) 334-0 can be 204 B in length, a 1^(st) parity data p₁(x) 340-1 can be 166 B in length, a 2^(nd) parity data p₂(x) 340-2 can be 150 B in length, and a 3^(rd) through 7^(th) parity data p₃(x) 340-3 to p₇(x) 340-7 can each be 138 B in length. While, in this example, the 0^(th) parity data p₀(x) 340-0 is 204 B in length, embodiments are not so limited. For example, any of the illustrated portions of parity data could be 204 B in length with at least one of the portions of parity data being the particular length and so forth for each of the illustrated lengths. A plurality of codewords c₀(x) 334-0 to c₇(x) 334-7 include the plurality of data portions a₀(x) 320-0 to a₇ (x) 320-7 and the plurality of portions of parity data p₀(x) 340-0 to p₇(x) 340-7.

As illustrated at the bottom of FIG. 3, a 4 KB user data sector (e.g., user data sector) 335 can be divided into 2 BCH codewords and a 16 KB (with additional parity overhead) flash page contains 8 BCH codewords. For example, codeword c₇(x) and c₆(x) are 4 KB in length and make up one user data sector 335 and codewords c₇(x) to c₀(x) are 16 KB in length and include 8 BCH codewords. The 16 KB section includes 4 user data sectors. To use a 4 KB data portion, each BCH interleave encodes 2 KB data with different parity length. This results in different interleave length. In this regard, GII-BCH coding allows for different interleave length without affecting the proposed encoder and/or decoder.

A first layer (e.g., first level) integrated interleaved (II) codeword (described above and also referred to herein as interleaves) C₀ 342 (illustrated as C₀ 342-0 to C₇ 342-7, to illustrate that the II codeword corresponds to each codeword 334-0 to 334-0 being in the set of C₀ 342) includes an integrated interleaving (II) of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7. The II codeword C₀ 342 has an error-correction ability indicated by t corresponding to each codeword 334. For example, the II codeword C₀ has a t=73 for each of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7. This t=73 indicates that the II codeword C₀ 342-0 can correct up to 73 errors for codewords c₀(x) 334-0 through c₇(x) 334-7. Since the II codeword C₀ 342 includes an integrated interleaving of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7, a redundancy is created. In this way, the II codeword C₀ 342 can protect any of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7, as long as none of the errors per codeword exceeds 73 (as t=73 for the II code).

In response to at least one of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7 including more than 73 errors, in this example, a nested generalized integrated interleaved BCH code from a plurality of nested generalized integrated interleave (GII) BCH codewords C₁ 346-1, C₂ 346-2, C₃ 346-3 can be used to correct the errors. The plurality of nested generalized integrated interleave (GII) BCH codewords C₁ 346-1, C₂ 346-2, C₃ 346-3 are generated by a corresponding adder 344-1, 344-2, 344-3 that sums the II code including interleaved data from each of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7. The plurality of GII codewords C₁ 346-1, C₂ 346-2, C₃ 346-3 are a second layer or a sub-code of the first layer of code (e.g., II codeword C₀ 342).

Nested GII BCH codeword refers to a codeword that is part of a nested layer, as described above. The nested codeword is generalized in that it includes data from each of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7 and not just a portion of them. For example, in response to a codeword including up to 79 errors, nested GII BCH codeword C₁ 346-1 can correct the up to 79 errors (e.g., t=79) within an interleave and therefore can correct the 78 errors. Similarly, nested GII BCH codeword C₂ 346-2 can correct up to 88 errors (e.g., t=88) within an interleave and nested GII BCH codeword C₃ 346-3 can correct up to 108 errors (e.g., t=108) within an interleave. Therefore, the II BCH codeword 342 can correct up to 73 errors for each of the plurality of codewords c₀(x) 334-0 to c₇(x) 334-7 and at least one of the plurality of nested GII BCH codewords can correct each of 79 errors, 88 errors, and 108 errors, respectively. In response to an interleave including more than 108 errors, a failure would occur. For example, nested GII BCH codeword C₁ 346-1 could correct 108 errors and any errors over that would cause the failure. In response to two or more interleaves including more than 88 errors, a failure would occur. For example, nested GII BCH codeword C₁ 346-1 could correct one interleave including more than 88 errors (and up to 108 errors) but a second interleave with more than 88 errors could not be corrected. Further, in response to three or more interleaves including more than 79 errors, a failure would occur. Furthermore, in response to four or more interleaves including more than 73 errors, a failure would occur.

In some previous approaches, each portion of user data that is 2 KB in length can be protected by a BCH code with t ranging from 60 to 100. If a t of 80 is assumed, the code length lies between 2¹⁴ to 2¹⁵, therefore, the code is defined in the field of GF(2¹⁵). The length of parity overhead is 15×80=1200 bits. In at least one embodiment described herein, a sector failure rate can be maintained below 1e−12. Herein, this criterion can be used such that the (flash) page failure rate is below 1e−12. With simple interleaved 8 BCH codewords, a raw bit-error-rate (RBER) of 1.7e−3 can be achieved. Note the length of a user data sector is fixed to 4 KB, therefore, each interleave within a codeword varies slightly due to different parity length. Therefore, v=m−1=7 achieves the lowest RBER of 2.9e−3. However, it also suffers the highest and non-negligible invocation rate of 0.234, that is, nearly one out of four reads fails by self-decoding and reads an extra three sectors for nested decoding. Its random read throughput is degraded to

${\frac{1}{1 + {0.234 \times 3}} = {58.8\%}},$ which can be undesirable. In contrast, having v=3 can achieve a great trade-off. It enables a tolerance RBER of 2.7e-3,

$\frac{2.7 - 1.7}{1.7} = {58.8\%}$ lower than a previous interleaved method, while suffering merely

$\frac{{3 \times 1.72e} - 3}{1 + {3 \times 1.72e} - 3} = {{5.23e} - 3}$ in random read throughput.

A method for decoding binary BCH codes by incorporating a special syndrome property can include: S _(2i+1)

y(α^(2i+2))=y(α^(i+1))² =S _(i) ² ,i=0,1,2, . . . . which yields zero discrepancies at even iterations of the method. One example of a method for decoding binary BCH codes by incorporating a special syndrome property can include a simplified version of a Berlekamp-Massey method referred to as a simplified Berlekamp method. The method can perform t iterations. Similarly, the following updating method can be used to incrementally update the error locator polynomial utilizing the preceding results:

${{Input}{\text{:}\mspace{14mu}\left\lbrack {S_{0},\ldots\mspace{14mu},S_{{2t} - 1},\overset{\overset{new}{︷}}{S_{2t},\ldots\mspace{14mu},S_{{2t\;\prime} - 1}}} \right\rbrack}},{\Lambda^{({2t})}(x)},{B^{({{2t} - 1})}(x)},L_{\Lambda}^{({2t})},L_{B}^{({{2t} - 1})}$   For  r = 2t, 2t + 2, …  , 2t^(′) − 2, do: $\mspace{20mu}{{{Compute}\mspace{14mu}\Delta^{({r + 2})}} = {\sum\limits_{i = 0}^{L_{\Lambda}^{(r)}}{\Lambda_{i}^{(r)} \cdot S_{r - i}}}}$   Compute  Δ^((r + 2))(x) = Λ^((r))(x) − Δ^((r + 2)) ⋅ x²B^((r − 1))(x)   If  Δ^((r + 2)) ≠ 0  and  2L_(Λ)^((r)) ≤ r, then   Set  B^((r + 1))(x) ← (Δ^((r + 2)))⁻¹ ⋅ Λ^((r))(x)   Set  L_(Λ)^((r + 2)) ← L_(B)^((r − 1)) + 2, L_(B)^((r + 1)) ← L_(Λ)^((r))   Else   Set  B^((r + 1))(x) ← x²B^((r − 1))(x)   Set  L_(B)^((r + 1)) ← L_(B)^((r − 1)) + 2, L_(Λ)^((r + 2)) ← L_(Λ)^((r))   endif   endfor   Output:  Λ^((2t ′))(x), B^((2t ′ − 1))(x), L_(Λ)^((2t ′)), L_(B)^((2t ′ − 1))

In existing decoding methods, those syndromes can be computed from scratch. The following lemma demonstrates an alternative, and much more efficient approach.

Lemma 2 Let c be a transmitted codeword and y the received word. If there are e≤t errors and let A(x) be the corresponding error locator polynomial, then the higher order syndromes S_(i)

y(α^(i+1))−c(α^(i+1)), i≥2t can be computed recursively through the following LFSR S _(i) =−A ₁ S _(i−1) −A ₂ S _(i−2) − . . . −A _(s) S _(i−s) ,i≥2t.  (24) The decoding method is described below.

-   -   1. Input: y=[y₀, y₁, . . . , y_(m−1)]     -   2. Compute syndromes {S_(2j) ^((i))}_(j=0) ^(t) ⁰ ⁻¹ and set         {S_(2j+1) ^((i))}_(j=0) ^(t) ⁰ ⁻¹←{(S_(j) ^((i)))²}_(j=0) ^(t) ⁰         ⁻¹, for i=0, 1, . . . , m−1.     -   3. Apply the method with input {S_(j) ^((i))}_(j=0) ^(2t) ⁰ ⁻¹         to produce error locator polynomial set (A^((i,2t) ⁰ ⁾(x),         B^((i,2t) ⁰ ⁻¹⁾(x)), for i=0, 1, . . . , m−1, respectively. For         i=0, 1, . . . , m−1, if A^((i,2t) ⁰ ⁾(x) has exactly L_(A)         ^((i,2t) ⁰ ⁾ distinct roots within {α^(−i)}_(i=0) ^(n−1), then         correct the interleave y_(i), else save the result (A^((i,2t) ⁰         ⁾ (x), B^((i,2t) ⁰ ⁻¹⁾(x)).     -   4. If all successful, then return the corrected codeword c=[c₀,         c₁, . . . , c_(m−1)]; else if there are more than v         uncorrectable interleaves, then declare failure; else denote by         I={I₁, I₂, . . . , I_(b)} the index set of the uncorrectable         interleaves.     -   5. Compute corrupted nested interleaves         {tilde over (y)} _(i)(x)=Σ_(j∈I)α^(ij)(x)y _(j)(x)+Σ_(j∈I) _(c)         α^(ij)(x)c _(j)(x)  (25)         for i=0, 1, 2, . . . , b−1.     -   6. Compute higher order syndromes {{tilde over (S)}_(2j)         ^((i))}_(j=t) ₀ ^(t) ^(v−1) ⁻¹ over each nested interleaves         y_(i), i=0, 1, 2, . . . , b−1.     -   7. While I≠ø, do:

(a) Compute syndromes {{tilde over (S)}_(2j) ^((l) ^(i) ⁾}_(j=t) _(v−b′) ^(t) ^(v−b) ⁻¹, i=1, 2, . . . , b, through (26),

$\begin{matrix} {\begin{bmatrix} S_{2j}^{(l_{1})} \\ S_{2j}^{(l_{2})} \\ \vdots \\ S_{2j}^{(l_{b})} \end{bmatrix} = {\begin{bmatrix} 1 & 1 & \ldots & 1 \\ \alpha^{{({{2j} + 1})}l_{1}} & \alpha^{{({{2j} + 1})}l_{2}} & \ldots & \alpha^{{({{2j} + 1})}l_{b}} \\ \vdots & \vdots & \ddots & \vdots \\ \alpha^{{({{2j} + 1})}{({b - 1})}l_{1}} & \alpha^{{({{2j} + 1})}{({b - 1})}l_{2}} & \ldots & \alpha^{{({{2j} + 1})}{({b - 1})}l_{b}} \end{bmatrix}^{- 1}\begin{bmatrix} {\overset{\sim}{S}}_{2j}^{(0)} \\ {\overset{\sim}{S}}_{2j}^{(1)} \\ \vdots \\ {\overset{\sim}{S}}_{2i}^{({b - 1})} \end{bmatrix}}} & (26) \end{matrix}$ for ĵ=t_(v−b′), t_(v−b′)+1, . . . , t_(v−b)−1, where b′ is initialized to v. Compute the corresponding odd-term syndromes [S _(2j+1) ^((l) ^(s) ⁾ ,S _(2j+1) ^((l) ^(s) ⁾ , . . . S _(2j+1) ^((l) ^(b) ⁾]=[S _(j) ^((l) ^(s) ⁾)² ,S _(j) ^((l) ^(s) ⁾)² , . . . ,S _(j) ^((l) ^(b) ⁾)²] for j=t_(v−b′), t_(v−b′++1), . . . , t_(v−b)−1.

(b) Apply the updating method with extra inputs {S_(j) ^((l) ^(i) ⁾}_(j=2t) _(v−b′) ^(2t) ^(v−b) ⁻¹ to produce new error locator polynomial set (A^((l) ^(i) ^(,2t) ^(v−b) ⁾(x),B^((l) ^(i) ^(,2t) ^(v−b) ⁾(x)), for i=1, 2, . . . , b, respectively. For i=1, 2 . . . . , b, if A^((l) ^(i) ^(,2t) ^(v−b) ⁾(x) has exactly L_(A) ^((l) ^(i) ^(,2t) ^(v−b) ⁾ distinct roots within {α^(−i)}_(i=0) ^(n−1), then correct the interleave y_(l) _(i) ; else save the result (A^((l) ^(i) ^(,2t) ^(v−b) ⁾(x),B^((l) ^(i) ^(,2t) ^(v−b) ⁻¹⁾(x)).

(c) Let I′ be the index set of newly corrected interleaves. Set I←I−I′, b′←b, and b=|I|. If I′=ø (no interleave is newly corrected) or t_(v−b)=t_(v−b′) (it fails to produce extra higher order syndromes) then declare failure. If I=ø (all remaining interleaves are corrected) then return the corrected codeword.

(d) For each i∈I′, compute higher order syndromes {S_(2j) ^((i))}_(j=t) _(v−b′) ^(t) ^(v) ⁻¹ through the recursive LFSR (25). Update higher order nested syndromes through {{tilde over (S)} _(2j) ^((i))}_(j=t) _(v−b′) ^(t) ^(v−l) ⁻¹ ←{{tilde over (S)} _(2j) ^((i))−Σ_(i∈I′)α^((2j+1)il) S _(2j) ^((i))}_(j=t) _(v−b′) ^(t) ^(v−l) ⁻¹.  (27)

for 0≤l<b.

Note that the equality (27) is due to the fact: if y′(x)=α(x^(l))y(x), then S′ _(j)

y′(α^(j+1))=α^(t(j+1)) y(α^(j+1))=α^(l(j+1)) S _(j).

The generalized integrated interleaving scheme for binary BCH codes described herein can provide a lower bound on the minimum distance. The encoding and decoding methods described herein provide for an improved distributed environments where interleaves are distributed into different physical units and self-decoding is sufficient under normal operation condition.

Although specific embodiments have been illustrated and described herein, those of ordinary skill in the art will appreciate that an arrangement calculated to achieve the same results can be substituted for the specific embodiments shown. This disclosure is intended to cover adaptations or variations of one or more embodiments of the present disclosure. It is to be understood that the above description has been made in an illustrative fashion, and not a restrictive one. Combination of the above embodiments, and other embodiments not specifically described herein will be apparent to those of skill in the art upon reviewing the above description. The scope of the one or more embodiments of the present disclosure includes other applications in which the above structures and methods are used. Therefore, the scope of one or more embodiments of the present disclosure should be determined with reference to the appended claims, along with the full range of equivalents to which such claims are entitled.

In the foregoing Detailed Description, some features are grouped together in a single embodiment for the purpose of streamlining the disclosure. This method of disclosure is not to be interpreted as reflecting an intention that the disclosed embodiments of the present disclosure have to use more features than are expressly recited in each claim. Rather, as the following claims reflect, inventive subject matter lies in less than all features of a single disclosed embodiment. Thus, the following claims are hereby incorporated into the Detailed Description, with each claim standing on its own as a separate embodiment. 

What is claimed is:
 1. A method for interleaving Bose-Chaudhuri-Hocquenghem (BCH) codewords, comprising: encoding a first plurality of portions of data using a first generator polynomial to obtain a plurality of respective BCH codewords, wherein each of the plurality of respective BCH codewords comprises respective data and a respective quantity of parity data, wherein at least one respective quantity of parity data is different than at least one other respective quantity of parity data; encoding a generalized integrated interleaved (GII) BCH codeword based at least in part on a second plurality of portions of data and on the plurality of respective BCH codewords using a second generator polynomial, wherein: the second plurality of portions of data is encoded by the second generator polynomial resulting in a first output; and the first output is added to a second output, wherein the second output is from a multiplexer which receives as inputs the plurality of respective BCH codewords and the first plurality of portions of data; and outputting the plurality of respective BCH codewords and the generalized integrated interleaved (GII) BCH codeword.
 2. The method of claim 1, wherein the plurality of respective BCH codewords and the GII BCH codeword are encoded by substituting an integrating coefficient with a polynomial of α(x^(bi)).
 3. The method of claim 1, wherein encoding the plurality of respective BCH codewords comprises encoding a plurality of integrated interleaved BCH codewords.
 4. The method of claim 1, wherein encoding the in plurality of respective BCH codewords comprises encoding the first plurality of respective BCH codewords in a first encoding layer and encoding the generalized integrated interleaved (GII) BCH codeword comprises encoding the generalized integrated interleaved (GII) BCH codeword in a sub-layer of the first encoding layer.
 5. The method of claim 1, wherein encoding the plurality of respective BCH codewords comprises encoding the plurality of respective BCH codewords in a first encoding level and encoding the generalized integrated interleaved (GII) BCH codeword comprises encoding the generalized integrated interleaved (GII) BCH codeword in a second encoding level.
 6. The method of claim 5, further comprising generating a second generalized integrated interleaved (GII) BCH codeword and a third generalized integrated interleaved (GII) BCH codeword associated with the second encoding level, wherein the generalized integrated interleaved (GII) BCH codeword is a first generalized integrated interleaved (GII) BCH codeword.
 7. The method of claim 6, further comprising correcting a number of interleaves of codewords, wherein the first generalized integrated interleaved (GII) BCH codeword is configured to correct a greater number of errors in at least one of the number of interleaves than the plurality of respective BCH codewords.
 8. The method of claim 7, wherein the second generalized integrated interleaved (GII) BCH codeword is configured to correct a greater number of errors in at least one of the number of interleaves than the plurality of respective BCH codewords and the generalized integrated interleaved (GII) BCH codeword.
 9. The method of claim 8, wherein the third generalized integrated interleaved (GII) BCH codeword is configured to correct a greater number of errors in at least one of the number of interleaves than the plurality of respective BCH codewords, the first generalized integrated interleaved (GII) BCH codeword, and the second generalized integrated interleaved (GII) BCH codeword.
 10. A method for encoding and decoding, comprising: encoding a first plurality of portions of data using a first generator polynomial to obtain a plurality of respective Bose-Chaudhuri-Hocquenghem (BCH) codewords, wherein each of the plurality of respective BCH codewords comprises respective data and a respective quantity of parity data, wherein at least one respective quantity of parity data is different than at least one other respective quantity of parity data; encoding a generalized integrated interleaved (GII) BCH codeword based at least in part on a second plurality of portions of data and on the plurality of respective BCH codewords using a second generator polynomial, wherein: the second plurality of portions of data is encoded by the second generator polynomial resulting in a first output; and the first output is added to a second output, wherein the second output is from a multiplexer which receives as inputs the plurality of respective BCH codewords and the first plurality of portions of data; and outputting the plurality of respective BCH codewords and the integrated interleaved (II) BCH codeword; determining a number of BCH code syndromes of a plurality of nested integrated interleaved (II) BCH codewords of the II BCH codeword; setting respective syndromes of a sequence of odd syndromes of the number of BCH code syndromes to respective syndromes of a sequence of squared BCH code syndromes; locating at least one interleave of the plurality of nested integrated interleaved (II) BCH codewords based on a generated error locator polynomial, wherein the generated error locator polynomial is generated using a previously generated error locator polynomial during a previous decoding attempt; and correcting the at least one interleave.
 11. The method of claim 10, comprising, prior to determining the number of BCH code syndromes of the plurality of nested II BCH codewords: determining a number of BCH code syndromes of a plurality of II BCH codewords; generating a prior error locator polynomial; locating at least one interleave of the plurality of II BCH codewords based on the prior error locator polynomial; and in response to a number of interleaves of the plurality of II BCH codewords being uncorrectable independent of using the plurality of nested II BCH codewords, performing the determination of the number of BCH code syndromes of the plurality of nested II BCH codewords.
 12. The method of claim 11, comprising, in response to the number of interleaves of the plurality of II BCH codewords being correctable: correcting the number of interleaves that include an error; and saving the corrected number of interleaves that include the error.
 13. The method of claim 10, comprising generating the error locator polynomial.
 14. The method of claim 10, wherein the error locator polynomial is generated using a Berlekamp method and additional syndrome inputs.
 15. The method of claim 10, comprising determining higher order syndromes through a recursive linear-feedback shift registry (LFSR).
 16. The method of claim 15, comprising updating at least one of the higher order syndromes based on the determined higher order syndromes determination.
 17. An apparatus, comprising: a controller; and an encoder, wherein the encoder is configured to: encode a plurality of portions of data using a first generator polynomial to obtain a first plurality of respective Bose-Chaudhuri-Hocquenghem (BCH) codewords of a first encoding layer; encode a second plurality of nested BCH codewords based at least in part on an additional plurality of portions of data and the first plurality of respective BCH codewords using a second generator polynomial, wherein the second plurality of nested BCH codewords are a sub-layer of the first encoding layer and are a generalized integrated interleaved (GII) code, wherein: the additional plurality of portions of data is encoded by the second generator polynomial resulting in a first output; and the first output is added to a second output wherein the second output is from a multiplexer which receives as inputs the first plurality of respective BCH codewords and the plurality of portions of data; and wherein a minimum distance of the generalized integrated interleaved (GII) code is a minimum of respective terms corresponding to respective nested BCH codewords of the second plurality of nested BCH codewords, wherein each respective term comprises a respective distance of the corresponding respective nested BCH codeword.
 18. The apparatus of claim 17, wherein the encoder employs a polynomial of α(x^(bi)) to encode the first plurality of respective BCH codewords and the second plurality of nested BCH codewords.
 19. The apparatus of claim 17, wherein the encoder is further configured to encode the second plurality of nested BCH codewords with fewer codewords than the first plurality of respective BCH codewords.
 20. The apparatus of claim 17, wherein the encoder is further configured to encode the first and the second plurality by applying a linear-feedback shift registry encoding.
 21. The apparatus of claim 20, wherein the encoder is further configured to determine a parity polynomial p_(i)(x).
 22. An apparatus comprising: a controller; an encoder, wherein the encoder is configured to: encode a plurality of portions of data using a first generator polynomial to obtain a first plurality of respective Bose-Chaudhuri-Hocquenghem (BCH) codewords of a first encoding layer; encode a second plurality of nested BCH codewords based at least in part on an additional plurality of portions of data and the first plurality of respective BCH codewords using a second generator polynomial, wherein the second plurality of nested BCH codewords are a sub-layer of the first encoding layer and are an integrated interleaved (II) codeword, wherein: the additional plurality of portions of data is encoded by the second generator polynomial resulting in a first output; and the first output is added to a second output, wherein the second output is from a multiplexer which receives as inputs the first plurality of respective BCH codewords and the plurality of portions of data; and wherein a minimum distance of the integrated interleaved (II) codeword is a minimum of respective terms corresponding to respective nested BCH codewords of the second plurality of nested BCH codewords, wherein each respective term comprises a respective distance of the corresponding respective nested BCH codeword; and a decoder coupled to the controller, wherein the controller is configured to operate the decoder to: determine a first plurality of syndromes associated with the II codeword; set respective syndromes of a sequence of odd syndromes of the first plurality of syndromes to respective syndromes of a sequence of squared BCH code syndromes; locate at least one interleave of the II BCH codeword based on a generated first error locator polynomial; and in response to a number of interleaves of the II BCH codeword being uncorrectable, determine a number of BCH code syndromes of a plurality of nested integrated interleaved (II) BCH codewords of the II BCH codeword; generate a second error locator polynomial, wherein the second error locator polynomial is generated using the first error locator polynomial previously generated; locate at least one interleave of the plurality of nested II BCH codewords based on the second error locator polynomial; and correct at least one interleave. 